package com.hcss.sys.client.service;

import com.github.pagehelper.PageInfo;
import com.hcss.common.exception.HcssCommonException;
import com.hcss.sys.client.model.HcChrgClient;
import com.hcss.sys.client.model.par.HcChrgClientPar;
import com.hcss.sys.client.model.vo.HcChrgClientVO;

import javax.validation.constraints.NotNull;
import java.util.List;

/**
 * @描述: 客户表-服务接口
 * @作者: fangtao
 * @创建日期: 2020-09-18 14:29:21
 */
public interface HcChrgClientService {

	/**
	 * 分页并获取数据
     *
	 * @param par 参数对象
	 * @return
	 */
    PageInfo< HcChrgClient > queryPagingData( HcChrgClientPar par) throws Exception;

	/**
	 * 分页并获取复杂数据
	 *
	 * @param model 参数对象
	 * @return
	 */
	PageInfo< HcChrgClientVO > queryComplexPagingData( HcChrgClientVO model);
    
    /**
     * 获取全部数据，不分页
     * @param par
     * @return
     */
    List< HcChrgClient > queryAllData( HcChrgClientPar par) throws Exception;

	/**
	 * 获取全部复杂数据，不分页
	 * @param model
	 * @return
	 */
	List< HcChrgClientVO > queryComplexAllData( HcChrgClientVO model);
	
	/**
	 * 插入一个新的model
     *
	 * @param model 要插入的model
	 * @return
	 */
	void insertModel( HcChrgClient model);
	
	/**
	 * 更新一个model
     *
	 * @param model 要更新的model
	 * @return
	 */
    void updateModel( HcChrgClient model);
	
	/**
	 * 根据id集合删除数据
     *
	 * @param ids 要删除的id集合
	 * @return
	 */
    void deleteByIds(List<String> ids);

	/**
	 * 根据id集合删除数据并推送消息到货站
	 *
	 * @param ids 要删除的id集合
	 */
	void deleteByIdsAndSendCargo(List<String> ids);
	
	/**
	 * 通过主键id获取数据
     *
	 * @param id 主键
	 * @return
	 */
	HcChrgClient selectByPK( String id);

	/**
	 * 通过主键id获取复杂数据
	 * @param id
	 * @return
	 */
	HcChrgClientVO selectComplexDataById( String id);

	/**
	 * 校验数据
	 */
	void checkClientData( HcChrgClientVO model) throws Exception;

	/**
	 * 新增客户
	 * @param model
	 */
	void addClientVO( HcChrgClientVO model) throws Exception;

	/**
	 * 修改客户
	 * @param model
	 */
	void updateClientVO( HcChrgClientVO model) throws Exception;



	/**
	 * 客户关联货代航司
	 */
	void uAgentCarrier( HcChrgClientVO model);

	/**
	 * 获取客户关联货代航司
	 */
	HcChrgClientVO getAgentcarrier( String id) throws Exception;

	/**
	 * 客户重复性校验
	 * @param model
	 * @return
	 */
	Boolean checkClient( HcChrgClientVO model);

	/**
	 * 货代绑定 结算客户有效性校验
	 * @return
	 */
	void checkClientValid(String agentcode) throws HcssCommonException;
}
